;******************************************************************************************************************************************
;      PRACTICA PARA EL MANEJOY CONFIGURACION DEL I2C UTILIZANDO UN RTC DS1307 Y MOSTRAR EL VALOR EN LA PANTALLA LCD 16X2
;
;
;
;******************************************************************************************************************************************
      INCLUDE   <P16F877A.INC>
      LIST P=16F877A
        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BOREN_ON & _LVP_OFF   

;REDIFINICION DE NOMBRE

#DEFINE  PUERTO_A	PORTA                         
#DEFINE  PUERTO_B  	PORTB
#DEFINE  PUERTO_C  	PORTC
#DEFINE	 LCD_RS	   	PORTC,7
#DEFINE	 LCD_RW	   	PORTC,6
#DEFINE	 LCD_E	   	PORTC,5
#DEFINE	 LCD_PUERTO	PORTB 




		        CBLOCK	H'20'             ;BLOQUE DE VARIABLES O REGISTROS 
			CONT1	
			CONT2
			CONT3
			CONTADOR

                        ENDC


  		    	ORG	H'00'
			GOTO        	COMIENZO

			ORG     H'100'
COMIENZO	                CALL	PUERTO 		        ;LLAMDA A PUERTO. 
				CALL	CONFIG_LCD		;LLAMO A CONFIGURACION DE LCD
				CALL    RETARDO3
LCD				CALL	VISUALIZAR_LCD		;
				CALL	RETARDO3
				CALL	BORRAR_LCD
				CALL	REGRESAR_LCD
















 
			
								
;*****************************************************************************************************************************************
;          	BLOQUE DE RUTINAS 			BLOQUE DE RUTINAS
;*****************************************************************************************************************************************
PUERTO				BSF 	STATUS,RP0
               			BCF    	STATUS,RP1     ;BANCO 1   
 				MOVLW  	B'111111'
				MOVWF	TRISA
	        		MOVLW  	B'00000000'
				MOVWF	TRISB
				MOVLW	B'00011000'
	          		MOVWF	TRISC
	        		MOVLW	B'00000000' 
	        		MOVWF	TRISD
	        		MOVLW	B'111' 
	        		MOVWF	TRISE
				MOVLW   B'10000000'	;CONFIGURO LA VELOCIDAD ESTANDARD
   				MOVWF   SSPSTAT
   				MOVLW   .9		;PARA CONFIGURAR LA VELOCIDAD DEL BAUD RATE
   				MOVWF   SSPADD
	        		CLRF    OPTION_REG
				NOP
				MOVLW  	B'00000110'         
				MOVWF 	ADCON1     
 	        		BCF     PIE1,ADIE       ;DESABILITADA LA CONVERSION
	        		BCF 	STATUS,RP0	;BANCO 0	
				MOVLW	B'00000000' 
	       			MOVWF   INTCON	
				MOVLW   B'00101000'	;NO COLISON, NO DESBORDAMIENT, NO COLISION, ACTIVO EL PUERTO SERIE Y CLOCK FOSC/4
  				MOVWF   SSPCON	
				BSF 	STATUS,RP0	;BANCO 1
				CLRF	SSPCON2
				BCF	STATUS,RP0	;BANCO 0
				
				RETURN

;******************************************************************************************************************************************
;RUTINA PARA LA CONFIGURACION DE LAS OPERACIONES DE LA LCD

CONFIG_LCD			MOVLW	0X01		;EQUIVALENTE A BORRAR LA LCD
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X02		;EQUIVALENTE A RETORDAR EL CURSOR AL INICIO
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X06		;CONFIGURA EL MODO DE ENTRADA COMO EL INCREMENTO DEL CURSOR Y MODO NORMAL(AQUIPUEDOACTIVAR DESZPLAZAMIENTO)
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X0F		;COFIG DISPLAY CONTROL: DISPALY=ON,CURSOR=ON,PARPADEO DEL CURSOR=ON
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X38		;FUNCTION SET:BUS DE 8 BIT,LCD DE 2 LINEAS,CARACTER DE 5X7 PUNTOS
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X01		;EQUIVALENTE A BORRAR LA LCD
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				RETURN

;******************************************************************************************************************************************
;RUTINIA DE HABILATACION DE CONTROL Y DATOS PARA LA CONFIGURACION DEL LCD

CONTROL_LCD			MOVWF	LCD_PUERTO	;MUEVO EL VALOR DE W QUE POSEE EL CONTROL AL PUERTO PARA CONFIGURARLO
				BCF	LCD_RW		;COLOCO RW=0 PARA ACTIVAR LA ESCRITURA
				BCF	LCD_RS		;COLOCO RS=0 PARA ACTIVAR EL CONTROL
SALTOX				BSF	LCD_E		;COLOCO	E=0 PARA DAR EL PULSO
				NOP
				NOP			
				BCF	LCD_E		;PARA DAR POR TERMINADO EL PULSO
				BCF	LCD_RW		;PARA LIMPIARLO
				BCF	LCD_RS		;PARA LIMPIARLO
				GOTO	RETARDO1	;VOY AL RETARDO DE 5m SEGUNDOS PARA LA ESPERA DE LA LCD 
DATO_LCD			MOVWF	LCD_PUERTO	;MUEVO EL VALOR DE W QUE POSEE EL DATO A VISUALIZAR EN LA LCD
				BCF	LCD_RW		;COLOCO RW=0 PARA LA ESCRITURA
				BSF	LCD_RS		;COLOCO	RS=1 PARA ACTIVAR EL MODO DE DATOS
				GOTO	SALTOX		;ME VOY A SALTOX PARA DAR EL PULSO DE ACTIVACION Y LIMPIAR LOS REGISTROS

;******************************************************************************************************************************************
VISUALIZAR_LCD			CALL	BORRAR_LCD	;BORRO LA LCD POR SI TENGO ALGO EN ELLA
				MOVLW	' '		;SEGMENTO 1 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	' '		;SEGMENTO 2 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	' '		;SEGMENTO 3 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'H'		;SEGMENTO 4 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'O'		;SEGMENTO 5 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'L'		;SEGMENTO 6 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'A'		;SEGMENTO 7 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 8 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 9 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'M'		;SEGMENTO 10 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'U'		;SEGMENTO 11 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'N'		;SEGMENTO 12 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'D'		;SEGMENTO 13 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'O'		;SEGMENTO 14 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 15 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 16 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS

LINEA2				MOVLW	0XC0		;LO UTILIZO PARA MOVERME A LA LINEA 2
				CALL	CONTROL_LCD	;HABILITACION DE CONTROL
				MOVLW	' '		;SEGMENTO 1 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	' '		;SEGMENTO 2 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	' '		;SEGMENTO 3 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	' '		;SEGMENTO 4 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 5 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITAION DE DATOS
				MOVLW	' '		;SEGMENTO 6 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'D'		;SEGMENTO 7 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'O'		;SEGMENTO 8 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 9 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 10 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 11 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 12 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 13 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 14 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 15 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 16 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				RETURN



;******************************************************************************************************************************************
;RUTINA PARA BORRAR LA LCD
BORRAR_LCD			MOVLW	0X01		;EQUIVALENTE AL CONTROL BORRAR LCD
				GOTO	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL	
;******************************************************************************************************************************************
;RUTINA PARA REGRESAR EL CURSOR AL INICIO
REGRESAR_LCD			MOVLW	0X02		;EQUIVALENTE A RETORDAR EL CURSOR AL INICIO
				GOTO	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
;******************************************************************************************************************************************
RETARDO1		   	MOVLW 	.41		;RETARDO DE 5MILISEGUNDOS
				MOVWF 	CONT1
				MOVlW	.41
				MOVWF	CONT2
DEMORA1				DECFSZ 	CONT1,F 
				GOTO 	DEMORA1	
				DECFSZ 	CONT2,F
				GOTO	DEMORA1
				RETURN

;****************************************************************************************************************************************
RETARDO2		  	MOVLW 	.183			;RETARDO DE 1 SEGUNDOS
				MOVWF 	CONT1
				MOVlW	.183
				MOVWF	CONT2
				MOVLW 	.11
				MOVWF 	CONT3
DEMORA2				DECFSZ 	CONT1,F 
				GOTO 	DEMORA2	
				DECFSZ 	CONT2,F
				GOTO	DEMORA2
				DECFSZ 	CONT3,F
				GOTO	DEMORA2
				RETURN

;****************************************************************************************************************************************
RETARDO3		   	CLRF	CONT1		;RETARDO DE 3 SEGUNDOS PARA MOSTRAR EL NUMERO
				CLRF	CONT2
				MOVLW 	.16
				MOVWF 	CONT3
DEMORA3				DECFSZ 	CONT1,F 
				GOTO 	DEMORA3	
				DECFSZ 	CONT2,F
				GOTO	DEMORA3
				DECFSZ 	CONT3,F
				GOTO	DEMORA3
				RETURN

;****************************************************************************************************************************************

 END
